/******************************************************************************
* 文件名称: mutex.h
* 内容摘要: 互斥锁头文件
* 创建者の: 孔佳伟
* 个人主页: https://gitee.com/thin-wind/jump
* 修改记录: 
******************************************************************************/

#ifndef __MUTEX_H_
#define __MUTEX_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <common.h>
#include <list.h>
#include <queue.h>


typedef struct MUTEX
{
    LIST_NODE   node;       // 互斥锁链表节点
    // U08         lock;    // 锁状态
    U32         lock;       // 锁状态
    QUEUE       wait;       // 等待该互斥锁的任务队列（每个互斥锁都有一个等待队列）
} MUTEX;

/******************************************************************************
* 函数名称: void MutexInit(void)
* 功能说明: 初始化互斥锁
* 输入参数: 无
* 输出参数: 无
* 函数返回: 无
* 其它说明: 
******************************************************************************/
void MutexInit(void);

/******************************************************************************
* 函数名称: MUTEX* SYS_MutexCreat(void)
* 功能说明: 创建互斥锁
* 输入参数: 无
* 输出参数: 无
* 函数返回: MUTEX*          --互斥锁
* 其它说明: 
******************************************************************************/
MUTEX* SYS_MutexCreat(void);

/******************************************************************************
* 函数名称: E_RET SYS_MutexLock(MUTEX* mutex)
* 功能说明: 上锁
* 输入参数: MUTEX* mutex    --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_MutexLock(MUTEX* mutex);

/******************************************************************************
* 函数名称: E_RET SYS_MutexTryLock(MUTEX* mutex)
* 功能说明: 尝试上锁
* 输入参数: MUTEX* mutex    --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 任务不会被挂起
******************************************************************************/
E_RET SYS_MutexTryLock(MUTEX* mutex);

/******************************************************************************
* 函数名称: E_RET SYS_MutexLock(MUTEX* mutex)
* 功能说明: 解锁
* 输入参数: MUTEX* mutex    --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_MutexUnLock(MUTEX* mutex);

/******************************************************************************
* 函数名称: E_RET SYS_MutexDestory(MUTEX* mutex)
* 功能说明: 销毁互斥锁
* 输入参数: MUTEX* mutex    --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SYS_MutexDestory(MUTEX* mutex);

#ifdef __cplusplus
}
#endif

#endif

